﻿using System;
using SOAPServicios.Dominio;
using SOAPServicios.Persistencia;

namespace SOAPServicios
{
    public class PrestamoService : IPrestamoService
    {
        private PrestamoDAO prestamoDAO = null;
        private PrestamoDAO PrestamoDAO
        {
            get
            {
                if (prestamoDAO == null)
                    prestamoDAO = new PrestamoDAO();
                return prestamoDAO;
            }
        }
        private UsuarioDAO usuarioDAO = null;
        private UsuarioDAO UsuarioDAO
        {
            get
            {
                if (usuarioDAO == null)
                    usuarioDAO = new UsuarioDAO();
                return usuarioDAO;
            }
        }
        
        public Prestamo AprobarPrestamo(int idPrestamo)
        {
            try
            {
                Prestamo solicitudAprobar = new Prestamo();
                solicitudAprobar = PrestamoDAO.Obtener(idPrestamo);
                if (PrestamoDAO.NoDevueltosxDNI(solicitudAprobar.Usuario.IdUsuario)==null)
                {
                    throw new ArgumentException("El Solicitante tiene publicaciones por devolver!!!");
                }

                if (solicitudAprobar.Publicacion.DeEstado == "Mantenimiento" || solicitudAprobar.Publicacion.DeEstado == "Deteriorado")
                {
                    throw new ArgumentException("La Publicacion no puede Prestada por estar observada!!!");  
                }
                solicitudAprobar.DeSituacion = "Aprobada";
                DateTime fecharespuesta = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
                DateTime fechainicio = DateTime.Parse(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
                DateTime fechafin = DateTime.Parse(DateTime.Now.AddDays(solicitudAprobar.NuDias).ToString("yyyy-MM-dd"));
                solicitudAprobar.FeRespuesta = fecharespuesta;
                solicitudAprobar.FeInicio = fechainicio;
                solicitudAprobar.FeFin = fechafin;
                return PrestamoDAO.Modificar(solicitudAprobar);
            }
            catch(Exception e)
            {
                throw e;
            }
        }

        public void DenegarPrestamo(Prestamo prestamoDenegado)
        {
            Prestamo solicitudDenegar = new Prestamo();
            solicitudDenegar = PrestamoDAO.Obtener(prestamoDenegado.IdPrestamo);
            solicitudDenegar.DeSituacion = "Denegada";
            DateTime fecharespuesta = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            solicitudDenegar.FeRespuesta = fecharespuesta;
            solicitudDenegar.TxObservacion = prestamoDenegado.TxObservacion;
            PrestamoDAO.Modificar(solicitudDenegar);
        }

        public Prestamo ObtenerPrestamo(int id)
        {
            return PrestamoDAO.Obtener(id);
        }
    }
}
